## Loading required package: ggplot2
## Loading required package: rmarkdown
Avez-vous bien installé: * Le langage R * Le logiciel Rstudio * Le logiciel Gephi
Les cours se trouvent en ligne à l’adresse suivante: https://github.com/gabays/32M7129 * Github permet de partager du code * Chaque est donc du code transformé en slides * Vous trouverez y trouverez donc le code, et les slides
L’objectif de ce cours est 1. de penser et d’organiser au mieux la transformation de données textuelles en chiffres (un mot a un nombre d’occurrences, un lieu des coordonnées…) 2. pour rendre lisibles ces chiffres, au moyen de visualisations (des cartes, des graphiques…)
Pour chacune de ces deux étapes, les données subissent une transformation 1. Elle passent à travers un filtre mathématique (calcul de distance, algorithme…) 2. Elles subissent une déformation graphique (passage de n-dimensions à deux, perspective…)
20% center
Source: wikipedia
100% center
Source: wikipedia
Jacques Bertin (1967), Sémiologie graphique. Les diagrammes. Les réseaux. Les cartes, Paris/La Haye, Mouton ; Paris, Gauthier-Villars.
“La graphique”: un système dont les éléments, ou signes, ont une signification fixée à l’avance et unique, ce qu’exprime par exemple la légende d’une carte (1973, 6).
“Efficacité graphique”: “si pour obtenir une réponse correcte et complète à une question donnée, et, toutes choses égales, une construction requiert un temps d’observation plus court qu’une autre construction, on dira qu’elle est plus efficace pour cette question”. (1967, 139)
J. Bertin propose une grammaire graphique afin d’améliorer l’efficacité des rendus
100% center
Source: Palsky 2017/Bertin 1967
Surreprésentation ou sous-représentation ce qui se trouve dans les données
100% center
Se traduit en français par “bruit graphique” (littéralement “tableau déchet”).
« Les décorations intérieures aux graphiques sont autant d’encre qui ne dit rien de nouveau au lecteur. La raison d’être de la décoration varie — faire apparaitre le graphique comme plus scientifique et précis [expert], vivifier le style, donner la possibilité à l’illustrateur de faire la preuve de ses talents artistiques. Quelle qu’en soit la raison, c’est autant d’encre-sans-information ou d’encre-répétant l’information, et donc souvent du chartjunk [bruit graphique inutile]. »
Moretti tente d’analyser un “système mondial de la littérature” sur des principes similaires à ceux de l’économiste Immanuel Wallerstein (et de l’historien Fernand Braudel), qui analyse le “système-monde” sur la base de rapports qu’entretiennent le “centre”, la “semi-périphérie” et la “périphérie”.
Une telle approche requiert un très grand nombre de documents: il devient impossible de pratiquer ce que les anglo-saxons appellent le close reading (commentaire de texte): il faut prendre de la hauteur et essayer un distant reading.
100% center
Source: Moretti 2005
« La posture qui domine dans le champ du design d’information repose presque entièrement sur l’idée que les données pré-existent à leur affichage et que la tâche qui consiste à leur donner une forme visuelle consiste purement à transformer un exercice cognitif en un exercice perceptif. Si la valeur d’un design d’information intelligent dans l’interprétation de données statistiques ne saurait être surestimée, et ne pas prendre cela en compte serait ridicule, les limites de cette approche doivent aussi être soulignées. Pourquoi? Parce qu’elle restreint les conditions de la connaissance en suggérant que l’information existe indépendamment de sa présentation visuelle et attend simplement de recevoir la «meilleure» forme dans laquelle elle pourra être représentée.» (Drucker 2004)
Cette distinction entre str et int est fondamentale dès lors que l’on veut visualiser des données. Dans de nombreux cas, la visualisation nécessite de manipulation les données, or celles-ci peuvent être réalisées parfois sur des str ou int, mais dans certains cas uniquement sur des int. Un exemple tout simple serait l’addition: on ne peut effectuer l’addition “4+voiture” dans la vraie vie comme dans un ordinateur.
On va parler de données “catégorielles” et de données “métriques”. La différence entre ces types de données est majeure, car elle va limiter les visualisations possibles: s’il est possible de faire une AFC ou de construire avec des données catégorielles, il est impossible de faire un ACP sans des données métriques. Il en va de même pour construire un arbre de décision (données catégorielles et métriques) et une régression linéaire (données métriques uniquement).
Prenons la fréquence de deux mots uniquement: “Rome” et “qui”
| Token | Corneille | Racine |
|---|---|---|
| Rome | 4 | 2 |
| qui | 2 | 1 |
On crée deux vecteurs qui contiennent ces informations:
## [1] 4 2
## [1] 2 1
On les replace sur un plan:
100% center
On rajoute quelques informations pour faciliter la lecture du graphique
png(file="images/plot2.png")
plot(x,y, xlab="abscisse", ylab="ordonnée",
main="mon plan", pch=16, col="green")
dev.off()100% center
Ces points représentent des faits linguistiques calculés à partir des fréquences dans notre corpus. L’écart qui sépare ces points représente l’écart entre deux pratiques stylistiques:
png(file="images/plot3.png")
plot(x,y, xlab="abscisse", ylab="ordonnée",
main="mon plan (2)", pch=16, col="green")
s <- seq(length(x)-1) # one shorter than data
segments(x[s], y[s], x[s+1], y[s+1], col= 1:3)
dev.off()70% center
Il faut donc calculer comment aller du point A au point B
png(file="images/plot4.png")
plot(x,y, xlab="abscisse", ylab="ordonnée",
main="mon plan (3)", pch=16, col="green")
s <- seq(length(x)-1) # one shorter than data
arrows(x[s], y[s], x[s+1], y[s+1], col= 'pink')
dev.off()100% center
On peut complexifier le problème en ajoutant un troisième auteur: > C’est Rome qui demande nos larmes : Rome ! La Maîtresse de l’univers ; Rome ! Mère féconde des héros, et les délices des Dieux ; Rome ! Qui humiliait l’orgueil des tyrans de la Terre, et qui brillait les fers des Nations hélas !
Boyer, Caton, Acte IV, scène XII
Cela nous donne le tableau suivant:
| Token | Corneille | Racine | Boyer |
|---|---|---|---|
| “Rome” | 4 | 2 | 3 |
| “qui” | 2 | 1 | 2 |
Nous obtenons donc un nouveau graph:
x <- c(4,2,3)
y <- c(2,1,2)
png(file="images/plot5.png")
plot(x,y, xlab="abscisse", ylab="ordonnée",
main="mon plan (4)", pch=16, col="green")
s <- seq(length(x)-1) # one shorter than data
segments(x[s], y[s], x[s+1], y[s+1], col= 1:3)
segments(x[s], y[s], x[s+2], y[s+2])
text(x=3.95, y=1.9, labels="Corneille")
text(x=3.1, y=1.95, labels="Boyer")
text(x=2.2, y=1, labels="Racine")
dev.off()60% center
Il est donc possible de calculer la distance entre ces trois textes pour voir lesquels sont potentiellement les plus similaires, par exemple avec une distance euclidienne.
(Pour rappel, la distance entre deux points A et B est la racine carrée de la somme des carrés des différences de coordonnées en X et en Y.)
100% center
En faisant un rapide calcul, on peut donc confirmer notre validation par nos calculs de distance:
# sqrt((x1-x2)**2+(y1-y2)**2)
CoRa <- sqrt((4-2)**2+(2-1)**2)
cat("Distance Corneille/Racine = ", CoRa, "\n")## Distance Corneille/Racine = 2.236068
## Distance Corneille/Boyer = 1
## Distance Racine/Boyer = 1.414214
On intègre les distances dans le plan
x <- c(4,2,3)
y <- c(2,1,2)
png(file="images/plot6.png")
plot(x,y, xlab="abscisse", ylab="ordonnée",
main="mon plan (5)", pch=16, col="green")
s <- seq(length(x)-1) # one shorter than data
segments(x[s], y[s], x[s+1], y[s+1], col="red")
segments(x[s], y[s], x[s+2], y[s+2], col="red")
text(x=3.95, y=1.9, labels="Corneille", col="black")
text(x=3.1, y=1.95, labels="Boyer", col="black")
text(x=2.2, y=1, labels="Racine", col="black")
text(x=3, y=1.4, labels="2.2", col="blue") #CoRa
text(x=2.5, y=1.6, labels="1.4", col="blue") # RaBo
text(x=3.4, y=1.95, labels="1", col="blue") # CoBo
legend("topleft", legend=c("Auteur", "Dist. euclidienne"),
text.col = c("black", "blue"), cex=0.8)
dev.off()160% center
Exactement comme pour le texte, on doit passer par des chiffres pour travailler avec des images. Une image se compose de trois couleurs: rouge, vert et bleu. C’est le mélange de ces trois couleurs qui permet d’obtenir le résultat souhaité. Ainsi:
| Couleur | R | G | B |
|---|---|---|---|
| Noir | 255 | 215 | 0 |
| Rouge | 255 | 0 | 0 |
| Jaune | 255 | 255 | 255 |
Si nous prenons une couleur en RGB, il est utile en R de la transformer en triplet hexadécimal. Pour cela nous créons une fonction
Et nous transformons la couleur rouge en triplet, que l’on stocke dans une variable appelée “rouge”
On peut ensuite afficher une image simple: un carré rouge.
png(file="images/image1.png")
plot(c(100, 200), c(100, 100), type= "n", xlab = "", ylab = "")
rect(210, 150, 1, 1, col = red)
dev.off()100% center
150% center